package com.renny.simplebrowser.view.widget.pullextend;

/**
 * 下拉刷新和上拉加载更多的界面接口
 *      1、定义了 UI 的相关状态
 *      2、设置、获取当前 UI 状态
 *      3、获取当前布局的内容的大小，作为下拉刷新的临界点
 *      4、onPull，执行拉动操作的时候传递拉动距离
 *
 * @author Li Hong
 * @since 2013-7-29
 */
public interface IExtendLayout {
    /**
     * 当前的状态
     */
    enum State {

        /**
         * 初始化状态
         */
        NONE,

        /**
         * 当 UI 处于这个状态时，表示用户没有与下拉刷新功能交互
         */
        RESET,

        /**
         * UI 正在刷新的状态
         */
        startShowList,

        /**
         * 到达列表高度
         */
        arrivedListHeight,

        /**
         * 超出列表高度
         */
        beyondListHeight,
    }

    /**
     * 设置当前状态，派生类应该根据这个状态的变化来改变 View 的变化
     *
     * @param state 状态
     */
    void setState(State state);

    /**
     * 得到当前的状态
     *
     * @return 状态
     */
    State getState();

    /**
     * 得到当前 Layout 的内容大小，它将作为一个刷新的临界点
     *
     * @return 高度
     */
    int getContentSize();

    /**
     * 在拉动时调用
     *
     * @param offset 拉动的距离
     */
    void onPull(int offset);
}
